Fragmento de código con las instancias para instalar y cargar los paquetes utilizados en esta práctica.
#install.packages("ggplot2")
#install.packages("tidyverse")
#install.packages("data.table")
#install.packages("plotly")
library(ggplot2)
library(ggpubr)
library(tidyverse)
library(data.table)
library(modelr)
library(rmarkdown)
library(plotly)
# Procedemos a cargar el dataset "diamonds" que viene incluído en ggplot
diamDT <- as.data.table(ggplot2::diamonds)
diam_tibble <- as_tibble(ggplot2::diamonds)max(price) en función de carat.## carat max_price
## 1: 2.29 18823
## 2: 2.00 18818
## 3: 1.51 18806
## 4: 2.07 18804
## 5: 2.04 18795
## 6: 2.15 18791
## 7: 1.71 18791
## 8: 2.80 18788
## 9: 2.05 18787
## 10: 2.03 18781
max(price) en función de color.## color max_price
## 1: I 18823
## 2: G 18818
## 3: H 18803
## 4: F 18791
## 5: E 18731
## 6: J 18710
## 7: D 18693
max(price) en función de cut.## cut max_price
## 1: Premium 18823
## 2: Very Good 18818
## 3: Ideal 18806
## 4: Good 18788
## 5: Fair 18574
max(price) en función de clarity.## clarity max_price
## 1: VS2 18823
## 2: SI1 18818
## 3: IF 18806
## 4: SI2 18804
## 5: VS1 18795
## 6: VVS1 18777
## 7: VVS2 18768
## 8: I1 18531
max(price) en función de carat y color.## carat color max_price
## 1: 2.29 I 18823
## 2: 2.00 G 18818
## 3: 1.51 G 18806
## 4: 2.07 G 18804
## 5: 2.00 H 18803
## 6: 2.00 I 18795
## 7: 2.04 H 18795
## 8: 1.71 F 18791
## 9: 2.15 G 18791
## 10: 2.80 G 18788
max(price) en función de carat y cut.## carat cut max_price
## 1: 2.29 Premium 18823
## 2: 2.00 Very Good 18818
## 3: 1.51 Ideal 18806
## 4: 2.07 Ideal 18804
## 5: 2.00 Premium 18795
## 6: 2.04 Premium 18795
## 7: 1.71 Premium 18791
## 8: 2.15 Ideal 18791
## 9: 2.80 Good 18788
## 10: 2.05 Ideal 18787
max(price) en función de carat y clarity.## carat clarity max_price
## 1: 2.29 VS2 18823
## 2: 2.00 SI1 18818
## 3: 1.51 IF 18806
## 4: 2.07 SI2 18804
## 5: 2.29 SI1 18797
## 6: 2.00 VS1 18795
## 7: 2.04 SI1 18795
## 8: 1.71 VS2 18791
## 9: 2.15 SI2 18791
## 10: 2.80 SI2 18788
En el gráfico de puntos podemos observar que la relación entre el peso (carat) de los diamantes y el precio es exponencial.
cut)Si introducimos una tercera dimensión en el gráfico por medio del color, a simple vista es díficil discernir que tipo de relación puede haber entre el precio y la calidad del diamante (Ideal cut > Fair cut). Este efecto es debido principalmente a qué un diamante por un corte muy inferior que tenga, si el peso es mucho mayor, el precio será a ser mayor. Es posible observar también unos cuantos outliers más pesados y la mayoría corresponden a diamantes con un Fair cut.
facetsEsta forma de visualizar los datos es muy interesante. Ya que nos ha proporcionado la siguiente información:
color como cuarta dimensiónEste tipo de gráfico nos permite visualizar directamente varias estadísticos de un conjunto de variables categóricas. Es una manera muy visual de, ver cual es la dispersión de una variable dependiente respecto a las features que queremos estudiar. También nos permite detectar de forma muy visual outliers en estas distribuciones.
-La caja representa el rango intercuartil de la distribución (la diferencia entre el Q3 y Q1, que son las “tapas” de la caja) -La barra en mitad de la caja representa el valor mediano de la distribución. -Los límites de los bigotes (“whiskers”) muestran los valores “máximos” (Q3: Percentil 75%) y “mínimos” (Q1: Percentil 25%) -Los puntos rojos, que son los puntos que están por fuera del rango de los bigotes, son los posibles outliers de la distribución.
El gráfico de cajas confirma la sospecha de que diamantes con peor corte tienen mayor precio medio. Aunque no pueda parecer lógico, como ya adelanté, el peso de los diamantes (carat) es un factor importante en el precio final.
Con el color ocurre exactamente lo mismo. En los siguientes apartados analizaremos los datos más profundamente para contestar a estas preguntas.
Antes de responder las preguntas i y ii de este apartado, vamos a realizar una exploración del conjunto de datos más en profundidad y a su vez contestar a la pregunta iii.
Para realizar el Exploratory Data Analysis visual, empezamos haciendo un histograma para ver la cantidad de diamantes que hay en función de su peso.
Puede observarse como la mayoría de los diamantes tienen menos de 2 quilates y medio. También es interesante notar como tiende a haber más diamantes con pesos redondos (0.5, 1.0, 1.5 quilates, etc.), por lo que se puede intuir que el factor humano tiene cierta relevancia en el proceso de pulido de la gema.
## # A tibble: 11 x 2
## `cut_width(carat, 0.5)` n
## <fct> <int>
## 1 [-0.25,0.25] 785
## 2 (0.25,0.75] 29498
## 3 (0.75,1.25] 15977
## 4 (1.25,1.75] 5313
## 5 (1.75,2.25] 2002
## 6 (2.25,2.75] 322
## 7 (2.75,3.25] 32
## 8 (3.25,3.75] 5
## 9 (3.75,4.25] 4
## 10 (4.25,4.75] 1
## 11 (4.75,5.25] 1
Un 98% de los diamantes tienen menos de 3 quilates. Por lo que vamos a volver explorar de nuevo los datos con este grupo más “reducido”.
Aprovechando la relación exponencial entre price y carat. Vamos a realizar una transformación logarítmica de los datos para hacer una regresión lineal sobre las variables transformadas.
Calculamos la regresión lineal sobre los datos transformados
model_diam <- lm(log_price ~ log_carat, data = small_diam)
grid <- small_diam %>%
data_grid(carat = seq_range(carat, 20)) %>%
mutate(log_carat = log2(carat)) %>%
add_predictions(model_diam, "log_price") %>%
mutate(price = 2 ^ log_price)Y a continuación pintamos las predicciones hechas, sobre el dataset original (deshaciendo la transformación logarítmica):
##
## Call:
## lm(formula = log_price ~ log_carat, data = small_diam)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1.96159 -0.24547 -0.00853 0.23955 1.93281
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 12.191490 0.001965 6205.6 <2e-16 ***
## log_carat 1.678830 0.001931 869.4 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.3774 on 53898 degrees of freedom
## Multiple R-squared: 0.9334, Adjusted R-squared: 0.9334
## F-statistic: 7.559e+05 on 1 and 53898 DF, p-value: < 2.2e-16
Vemos que el modelo tiene un valor de \(R^2 = 0.9334\), un estadístico F y un p-valor muy bajos lo cual quiere decir que la significancia estadística del log(carat) con respecto al log(precio) es muy alta.
La ventaja de este modelo, además es su simplicidad, porque además, al no tener en cuenta variables categóricas como cut color no hacen falta variables dummy con el aumento de parámetros que añadir a la regresión.
En el gráfico de los residuos que ha dejado el modelo model_diam podemos ver una distribución sin ninguna tendencia. Esto es una buena señal, ya que hemos conseguido normalizar la distribución de nuestros datos al realizar la transformación
Volvemos a sacar los gráficos de cajas, pero esta vez con respecto a los residuos del precio. De esta forma, estamos eliminando la correlación que hay entre price y carat
cut y priceComo hemos realizado una transformación la interpretabilidad del eje y del modelo no es inmediata. Como se trata de una transformación logarítmica \(2^1 = 2\) \(2^-1 = 1/2\) por lo que, un diamante que tiene un valor en y un punto por encima que otro vale el doble.
Conclusión: la tendencia es la que se esperaría en un principio. A mayor calidad en el corte mayor precio.
color y priceConclusión: A mayor calidad en el color mayor precio.